/*所谓“水仙花数”是指一个三位数，其各位数字立方和等于该数，如：153就是一个水仙花数，153=1*1*1+5*5*5+3*3*3。*/
#include <stdio.h>



/*
使用while循环计算:
1-2+3-4+5-6+...-100的值;
*/
int addWhile(){
    int i=1;
    int sum=0;
    int flag=1;
    while(i<=100){
        i++;
        sum+=i*flag;
        flag*=-1;

    }
    return sum;
}


/*
使用do while循环计算:
1-2+3-4+5-6+...-100的值;
*/
int addDoWhile(){
    int i=1;
    int sum=0;
    int flag=1;
    do{
        i++;
        sum+=i*flag;
        flag*=-1;
    }while(i<=100);
    return sum;
}

/*
使用for循环计算:
1-2+3-4+5-6+...-100的值;
*/
int addFor(){
     int i=1;
    int sum=0;
    int flag=1;

    for(;i<=100;i++){
        sum+=i*flag;
        flag*=-1;
    }

    return sum;
}

/*
使用循环打印三角形
*/
void  triangle(){
    int i, j, k;
    for(i=1; i<5; i++)
    {
        /* 观察每行的空格数量，补全循环条件 */
        for(j=i;j<5;j++)  
        {
            printf(" ");    //输出空格
        }
        /* 观察每行*号的数量，补全循环条件 */
        for(k=0 ; k<2*i-1;k++) 
        {
            printf("*");   //每行输出的*号
        }
        printf("\n");     //每次循环换行
    }

}

/*循环打印乘法表*/
void multiplicationTable(){
    // 定义相乘数字i,j以及结果result
    int i, j, result;
     //外层循环i,从9开始，每次循环减1
     for(i=9;i>=1;i--){
         //内层循环j,从1开始，每次循环加1
         for(j=1;j<=i;j++)
         {
             //计算i与j的乘积
             result=i*j;
             //输出结果，\t表示每个算式中间的空白
             printf("%d*%d=%d\t",i,j,result);
         }
         //每次循环执行
         printf("\n");
    }

}

/*
循环  break求出0-50之间的所有素数。
素数就是只能被1和它本身整除的数字。
*/
void primeNumber(){
     int m, n;
    for(m=2; m<=50; m++)
    {
        for(n=2; n<m; n++)
        {
            if(m%n ==0 )
            //break是跳出当前整个循环      
              break;                //这里应该退出当前循环了
        }   
        if(m == n)   //n循环结束后，如果m=n的话就输出m
            printf("%d  ", m);
    }

    printf("\n");
}


/*1-20之间能被3整除的数字之和*/

int and(){
    int i, sum;
    for(i=1, sum=0; i<=20; i++)
    {
        if(i%3==0)    //能被3整除
        {
            //continue结束本次循环开始下一次循环
            continue;
        }                  
        sum += i;
    }
   return sum;
}

int main()
{
    //定义三位数num,个位数sd,十位数td,百位数hd
    int num, sd, td, hd;
    //循环所有三位数
    for(num=100  ;  num<1000   ;    num++ )
    {
        //获取三位数字num百位上的数字
        hd =num/100;
        //获取三位数字num十位上的数字
        td =(num%100)/10;
        //获取三位数字num个位上的数字
        sd =num%10;
        //水仙花数的条件是什么？
        if(num==hd*hd*hd+td*td*td+sd*sd*sd) 
        {
            printf("水仙花数字：%d\n", num);    
        }
    }

    printf("while计算1-2+3-4+5-6+...-100的值=%d\n",addWhile());

    printf("do while计算1-2+3-4+5-6+...-100的值=%d\n",addDoWhile());


    printf("for计算1-2+3-4+5-6+...-100的值=%d\n",addFor());


    printf("循环打印三角形:\n");

    triangle();

    printf("循环打印乘法表:\n");

    multiplicationTable();

    printf("0-50之间的所有素数:\n");

    primeNumber();

    printf("1-20之间能被3整除的数字之和=%d\n",and());


    return 0;    
}